
import { reqCartList,reqDeleteCartById, reqUpdateCheckedById} from "@/api";
const state = {
    cartList:[],
};
const mutations={
    GETCARTLIST(state,cartList){
        state.cartList = cartList;
    }
};
const actions={
// 获取购物车列表的数据
  async  getCartList({commit}){
   let result = await reqCartList();
// 测试是否可以获取个人购物车数据
//    console.log(result);
if(result.code==200){
    commit('GETCARTLIST',result.data);
}

   },
// 删除购物车某一个产品
  async deleteCartListBySkuId({commit},skuId){
    let result = await reqDeleteCartById(skuId);
    // 等待成功的结构  没有返回数组  不用三连环
    // 请求删除 总不能把删除信息返回过来
    // 组件需要知道是否成功  成功的话再发一遍请求 失败的话弹出信息
    if(result.code==200){
        // console.log(result);
        
        return 'ok';
    }else{
        return Promise.reject(new Error('faile'));
    }

},
// 修改购物车某一个产品
async updateCheckedById({commit},{skuId,isChecked}){
   let result = await reqUpdateCheckedById(skuId,isChecked);
   if(result.code==200){
       return 'ok'
   }else{
       return Promise.reject(new Error('faile'));
   }


},
// 删除全部勾选的产品
deleteAllCheckedCart({dispatch,getters}){
// context 就是小仓库 commit (提交mutations修改state)
// getters计算属性  dispatch派发action state当前仓库的数据
//   获取购物车中全部的产品（是一个数组）

let PromiseAll = [];
getters.cartList.cartInfoList.forEach(item=>{
  let promise = item.isChecked == 1?  dispatch('deleteCartListBySkuId',item.skuId):'';
//   将每一次返回的Promise添加到数组当中
PromiseAll.push(promise);
})
// 只要全部的p1|p2都成功 返回的结果就成功  如果有一个失败  返回就是失败
  return Promise.all(PromiseAll);
},
// 修改全部产品的状态
updateAllCartIsChecked({dispatch,state},isChecked){
let promiseAll = []
// console.log(state)
  state.cartList[0].cartInfoList.forEach(item=>{
 let promise =  dispatch('updateCheckedById',{skuId:item.skuId,isChecked});
 promiseAll.push(promise);

  });
//  最终返回的结果
return Promise.all(promiseAll)

}

};
const getters={
    cartList(state){
     return state.cartList[0]||[]
    },

};
export default{
    state,
    mutations,
    actions,
    getters
}